package com.yunke.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunke.dto.circle.YunkeCircleCommentDto;
import com.yunke.dto.circle.YunkeCirclePublishDto;
import com.yunke.entity.YunkeCircle;
import com.yunke.vo.circle.YunkeCircleCommentVo;
import com.yunke.vo.circle.YunkeCircleVo;

/**
 * 社交圈Service接口
 * 
 * @author yunke
 * @since 1.0.0
 */
public interface YunkeCircleService extends IService<YunkeCircle> {

    /**
     * 发布动态
     * 
     * @param publishDto 发布动态请求
     * @return 动态ID
     */
    Long publishCircle(YunkeCirclePublishDto publishDto);

    /**
     * 获取动态列表
     * 
     * @param current 当前页码
     * @param size 每页大小
     * @param type 动态类型（可选）
     * @param location 位置筛选（可选）
     * @return 动态列表
     */
    Page<YunkeCircleVo> getCircleList(Long current, Long size, Integer type, String location);

    /**
     * 获取动态详情
     * 
     * @param circleId 动态ID
     * @return 动态详情
     */
    YunkeCircleVo getCircleDetail(Long circleId);

    /**
     * 点赞/取消点赞动态
     * 
     * @param circleId 动态ID
     * @return 操作结果
     */
    boolean likeCircle(Long circleId);

    /**
     * 发表评论
     * 
     * @param commentDto 评论请求
     * @return 评论ID
     */
    Long addComment(YunkeCircleCommentDto commentDto);

    /**
     * 获取评论列表
     * 
     * @param circleId 动态ID
     * @param current 当前页码
     * @param size 每页大小
     * @return 评论列表
     */
    Page<YunkeCircleCommentVo> getCommentList(Long circleId, Long current, Long size);

    /**
     * 点赞/取消点赞评论
     * 
     * @param commentId 评论ID
     * @return 操作结果
     */
    boolean likeComment(Long commentId);

    /**
     * 删除动态
     * 
     * @param circleId 动态ID
     * @return 操作结果
     */
    boolean deleteCircle(Long circleId);

    /**
     * 删除评论
     * 
     * @param commentId 评论ID
     * @return 操作结果
     */
    boolean deleteComment(Long commentId);

    /**
     * 我的动态
     * 
     * @param current 当前页码
     * @param size 每页大小
     * @return 动态列表
     */
    Page<YunkeCircleVo> getMyCircleList(Long current, Long size);

    /**
     * 获取关注用户动态
     * 
     * @param current 当前页码
     * @param size 每页大小
     * @return 动态列表
     */
    Page<YunkeCircleVo> getFollowCircleList(Long current, Long size);

    /**
     * 举报动态
     * 
     * @param circleId 动态ID
     * @param reason 举报原因
     * @return 操作结果
     */
    boolean reportCircle(Long circleId, String reason);

    /**
     * 屏蔽动态
     * 
     * @param circleId 动态ID
     * @return 操作结果
     */
    boolean blockCircle(Long circleId);
} 